import type { ColProps, RowProps } from 'ant-design-vue'
import type { ComponentName } from './componentMap'

/**
 * 单个表单字段配置
 */
export interface FieldItem {
  prop: string // 字段名称
  label: string // 字段标签
  component?: ComponentName // 组件名
  formItemProps?: Record<string, any> // a-form-item 属性
  // 组件属性
  componentProps?: Partial<Record<string, any>> & {
    api?: (_arg?: any) => Promise<any>
    params?: Record<string, any>
    resultField?: string
    labelField?: string
    valueField?: string
    immediate?: boolean
  }
  colProps?: ColProps // a-col 布局属性
  ifShow?: boolean | ((model: Record<string, any>, field: Record<string, any>) => boolean) // 是否显示
  show?: boolean | ((model: Record<string, any>, field: Record<string, any>) => boolean) // 是否显示
}

/**
 * 组件 Props
 */
export interface Props {
  fields: FieldItem[] // 所有字段定义
  rowProps?: RowProps // a-row 属性
  colProps?: ColProps // a-col 布局属性
  maxShowFields?: number // 可见字段数限制，超过可展开 -1时显示所有
  modelValue?: Record<string, any> // v-model 绑定的数据
  showAction?: boolean // 是否显示操作区
  actionColProps?: ColProps // 操作区 a-col 布局属性
  showSearchButton?: boolean // 显示查询按钮
  showResetButton?: boolean // 显示重置按钮
  showExpandButton?: boolean // 显示展开按钮
  labelWidth?: string // 标签宽度
  labelCol?: Record<string, any> // label 样式配置
  wrapperCol?: Record<string, any> // wrapper 样式配置
  defultValue?: Record<string, any> // 默认值
}
